home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / util2 / ftype.lha / ftype.doc < prev    next >
Text File  |  1996-01-03  |  11KB  |  242 lines

  1. Ftype by Robert Dick (dickrp@wckn.dorm.clarkson.edu)
  2.  
  3. /*============================================================================*/
  4. This program can be distributed with the following conditions:
  5. 1) It is in its original form; all the files in this archive are included and 
  6. unchanged.
  7. 2) One may not charge more for it than the price of the media being used in its 
  8. distribution.  This means that one can "sell" a disk containing this program for 
  9. no more than the price of a blank disk.
  10. 3) Special case - inclusion in Aminet CD collections is allowed.
  11.  
  12. /*============================================================================*/
  13. Name: ftype
  14.  
  15. /*============================================================================*/
  16. Version: 1.0
  17.  
  18. /*============================================================================*/
  19. Tested on:
  20. Amiga 3000-25
  21. 4 megs fast, 2 megs chip
  22. Seagate ST32550N drive
  23. OS 3.1
  24.  
  25. /*============================================================================*/
  26. Function:
  27. This program determines a file's type based on past observances of similar 
  28. files.  It can perform an action on the file based on the file's type.
  29.  
  30. /*============================================================================*/
  31. Reason:
  32. Before ftype, it was necessary to update file recognizers as new file types came 
  33. into usage.  One had to go find a "brain file" or specify information from de
  34. tailed personal knowledge of the new file type.  Recognizers in the past often 
  35. (almost always) relied on a magic tag at near the start of a file to identify a 
  36. file.
  37.  
  38. Ftype learns how to recognize a new file without requiring you to research the 
  39. file format or go hunting for a brain file.  It takes advantage of magic numbers 
  40. but it doesn't rely on them.  This means that you can use ftype to differentiate 
  41. between C source files and C++ source files if you want to.  Of course, if two 
  42. files are extremely similar, ftype will have difficulty differentiating between 
  43. them.
  44.  
  45. /*============================================================================*/
  46. Disclaimer:
  47. I don't have any Amigas other than my trusty A3000 to test the system with so if 
  48. it makes your machine explode, tell me so I can fix the program.
  49.  
  50. /*============================================================================*/
  51. My results:
  52. I train the system with 2 instances of each of the following file types:
  53. ILBM, C source, JPEG, LHA, song lyrics, SAS/C object files, PostScript
  54.  
  55. When tested on 8 instances of each type, the system has a 100% recognition rate.
  56.  
  57. /*============================================================================*/
  58. Usage:
  59. ftype -k <type>: Kill a file type.
  60.  
  61. ftype -t [-v] <type> <file>: Train.
  62. Trains the network to recognize the specified file as a member of the specified 
  63. type.
  64.  
  65. ftype -h: Help.
  66. Prints out a list of flags that can be used with ftype.
  67.  
  68. ftype -p: Print network.
  69. Prints out the neural weights for each file type.  This is useful to me for de
  70. bugging purposes.
  71.  
  72. ftype -l: List file types known.
  73. Shows the names of the file types the network has been trained with and tells 
  74. how many times each file type has been trained.
  75.  
  76. ftype [-ivqadx] <file>: recognize file
  77. Determines which type the specified file is and takes other actions bases on the 
  78. flags given on the command line.
  79.  
  80. -i: Implicit training.
  81. When a file type is strongly identified, it is used to refine the network.
  82.  
  83. -v: Verbose.
  84. Tells how far from each file type known by the network the given file is.
  85.  
  86. -q: Quiet.
  87. Doesn't print out the type of the file recognized.  This is useful for shutting 
  88. ftype up when you just want to have it take an action with -d or -x.
  89.  
  90. -a <number>: Specify an accuracy 1 to 5.
  91. Higher numbers result in ftype being slower but more accurate.  It is not recom
  92. mended that implicit training be done with low accuracy values.
  93.  
  94. -d: Carry out the default action.
  95. Executes the default action for this file type.  See the "Actions" section for 
  96. more information.
  97.  
  98. -x <action>: Carry out the specified action.
  99. A more flexible version of -d.  See the "Actions" section.
  100.  
  101. /*============================================================================*/
  102. Environment Variables:
  103. Ftype uses three environment variables.
  104.  
  105. FTYPE_ACCURACY - This optional variable should hold a number from 1 to 5.  It 
  106. specifies the accuracy ftype will use when identifying files.  It is overridden 
  107. by the -a command line flag.  If this environment variable does not exist and no 
  108. accuracy is specified on the command line, ftype defaults to and accuracy of 3.  
  109. See the "Usage" section for more information.
  110.  
  111. FTYPE_DATADIR - This necessary variable should hold the directory in which ftype 
  112. will locate its data file, "ftype.dat".
  113. Example: sys:ftype/
  114.  
  115. FTYPE_ACTIONDIR - This variable is necessary if the -d or -x flags are to be 
  116. used.  It specifies a directory in which ftype's action description files can be 
  117. found.  See the "Actions" section for more information.
  118. Example: sys/ftype/actions/
  119.  
  120. /*============================================================================*/
  121. Actions:
  122. Ftype is capable of carrying out actions based on the type of a file that it 
  123. recognizes.  This can most easily be illustrated by giving an abstract example.
  124.  
  125. You have trained ftype to recognize three file types: image, sound, source.  You 
  126. find that you often carry out the same abstract operation on each of these three 
  127. file types, viewing.  You find yourself, however, using three different commands 
  128. to view these files.  You can use ftype to handle these details for you.
  129.  
  130. 1) Specify ftype's "action" directory with the FTYPE_ACTIONDIR environment vari
  131. able.
  132. 2) Create a file called "image" (the same name as the file type you have taught 
  133. ftype).  In this file, specify the names of different actions, one of which may 
  134. be the default action, and associate a command with each one.  Do the same for 
  135. "sound" and "source".
  136.  
  137. Now, when you type ftype -x view main.c, ftype figures out what main.c is and 
  138. carries out the appropriate viewing operation.
  139.  
  140. /*============================================================================*/
  141. Action File Format
  142. The name of each action appears at the start of a line.  The command line (what 
  143. you would type into the shell) appears on the same line, separated by 
  144. whitespace.  The action with the name "default" will be carried out when the -d 
  145. command line flag is passed to ftype.  The character '@' is used to cause the 
  146. name of the file being identified to be inserted.  Two consecutive '@'s will re
  147. sult in the placement of a single '@'.
  148.  
  149. Example for a text file type:
  150.  
  151. default run >NIL: muchmore C=000,fff,83E,F72 @
  152. view run >NIL: muchmore C=000,fff,83E,F72 @
  153. edit run >NIL: ed [] window=con:0/0/724/239/Ed/close @
  154. junk mv @ sys:trash/old_text
  155. print printfiles @
  156.  
  157. /*============================================================================*/
  158. Alias Trick
  159. If you get tired of typing something like "ftype -q -x view dragon.iff" every 
  160. time you want to use ftype to view a file, you can add a few lines to your 
  161. shell-startup to make things more transparent.
  162.  
  163. Example:
  164. alias fview "ftype -q -x view []"
  165. alias fdo "ftype -q -d []"
  166. alias fedit "ftype -q -x edit []"
  167.  
  168. /*============================================================================*/
  169. (Basic) Theory:
  170. One may view the master neurons in ftype, one of which is associated with each 
  171. file type, as irregular regions on a map.  Each file occupies a region of the 
  172. map and it is the purpose of each neuron to fit itself to it's own file type.  
  173. The neuron only knows about a limited number of instances (dots on the map) of 
  174. its file type (the ones you have trained it with) so it must make assumptions 
  175. about the shape of its file type region's border.  Sometimes one neuron will en
  176. croach on another's file type region.  As you train the system, you may find 
  177. that it occasionally punishes a neuron.  Punishment forces a neuron to selec
  178. tively retract from another neuron's file type region.
  179.  
  180. What I just told you isn't quite true.  The "map" is a non-linear combination of 
  181. 60, 40 and 2 dimensional regions.  The file type regions are 102 dimensional 
  182. blobs.  I'm amazed that the program works at all.
  183.  
  184. /*============================================================================*/
  185. Changes:
  186. Version 0.9
  187. First version
  188.  
  189. Version 1.0
  190. Fixed infinite punishment bug.
  191. Thanks to James Atwill and Magnus Holmgren for the bug reports.
  192.  
  193. Fixed neuron creation memory allocation bug.
  194. A big thanks to Brian Mury for catching this one.  I can't believe I let it slip 
  195. through.
  196.  
  197. Allows user to select the speed (and accuracy) of feature extraction.
  198. Thanks to Meni Berman with his slower A1200 for the suggestion.
  199.  
  200. Lets user list file types known and the number of times each has been trained.
  201.  
  202. File types can now be killed.
  203.  
  204. Now uses (and needs) environment variables.
  205.  
  206. Changed the meaning of the -d flag.
  207.  
  208. Lets user associate actions with a file type (big change).
  209.  
  210. I made major changes to the neural network's learning schedule.  This should re
  211. sult in faster and more accurate learning but, unfortunately, it was necessary 
  212. to change the format of the data file.
  213.  
  214. /*============================================================================*/
  215. Write Me:
  216. If you have suggestions regarding improvements you would like to see or bug re
  217. ports, write me.  I'm also very interested in hearing about how well ftype works 
  218. for you.  What file types does it recognize?  What accuracy are you getting out 
  219. of it?  Please write me.  I only have a limited number of files I can test it 
  220. with.
  221.  
  222. /*============================================================================*/
  223. Suggestions I probably won't do anything about:
  224. I have received a number of helpful suggestions from the users of ftype 0.9.  
  225. There are a few recurring requests that I probably won't be doing anything 
  226. about.
  227.  
  228. 1) Right now, ftype compiles under any system with an ANSI C compiler.  I am re
  229. luctant to make any change that will tie it to one platform.  You may wonder why 
  230. I'm distributing ftype for the Amiga and for no other platform.  I have always 
  231. had much better luck getting helpful suggestions and coherent bug reports from 
  232. Amiga users than those of more popular "commodity" computer systems.
  233.  
  234. 2) A few people have asked for control over the structure of the neural network 
  235. used in ftype.  This would defeat one of the main purpose of the program; sim
  236. plicity from the user's perspective.  It's tedious, difficult, and not at all 
  237. fun to set up a functional neural network and training schedule.  If you enjoy 
  238. this sort of thing, see a psychiatric doctor.
  239.  
  240. Robert Dick (dickrp@wckn.dorm.clarkson.edu)
  241.  
  242.